/**
 * 版权所有 2009-2012山东新北洋信息技术股份有限公司
 * 保留所有权利。
 */
package com.linyaonan.leetcode.easy._437;

/**
 * @ProjectName: leetcode
 * @Package: com.linyaonan.leetcode.easy._437
 * @ClassName: PathSumIII
 * @Author: linyaonan
 * @Date: 2019/12/30 10:09
 */
public class PathSumIII {

    public int pathSum(TreeNode root, int sum) {
        if (root == null) {
            return 0;
        }
        return pathSum(root, sum, new int[1000], 0);
    }

    /**
     *
     * @param root 根节点
     * @param sum 目标值
     * @param array 保存每个节点的数组
     * @param p array的index
     * @return
     */
    private int pathSum(TreeNode root, int sum, int[] array, int p) {
        if (root == null) {
            return 0;
        }
        int tmp = root.val;
        int n = root.val == sum ? 1 : 0;
        for (int i = p - 1; i >= 0; i--) {
            tmp += array[i];
            if (tmp == sum) {
                n++;
            }
        }
        array[p] = root.val;
        int n1 = pathSum(root.left, sum, array, p + 1);
        int n2 = pathSum(root.right, sum, array, p + 1);
        return n + n1 + n2;
    }
}
